package inmobiliaria.frsf.bo.impl;

import inmobiliaria.frsf.bo.VentaBO;
import inmobiliaria.frsf.dao.VentaDAO;
import inmobiliaria.frsf.dao.impl.VentaDAOImpl;
import inmobiliaria.frsf.enums.EstadoInmuebleEnum;
import inmobiliaria.frsf.model.Cliente;
import inmobiliaria.frsf.model.Inmueble;
import inmobiliaria.frsf.model.Persona;
import inmobiliaria.frsf.model.Venta;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Gonzalo
 * 
 */
public class VentaBOImpl implements VentaBO {

	private VentaDAO ventaDAO = new VentaDAOImpl();

	/**
	 * @param Obtiene
	 *            mapa para insercion de la Venta
	 * @return
	 */
	private Map<String, Object> getMapByVenta(Venta venta) {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();

		datosConsulta.put("id_venta", venta.getId());
		datosConsulta.put("id_vendedor", venta.getVendedor().getIdPersona());
		datosConsulta.put("id_cliente", venta.getCliente().getIdPersona());
		datosConsulta.put("id_inmueble", venta.getInmueble().getIdInmueble());
		datosConsulta.put("monto", venta.getMonto());
		datosConsulta.put("fecha", venta.getFecha().getTime());

		return datosConsulta;
	}

	/**
	 * @param Obtiene
	 *            mapa para la actualizacion del estado del inmueble
	 * @return
	 */
	private Map<String, Object> getMapByInmueble(Inmueble inmueble,
			Persona cliente) {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();

		datosConsulta.put("id", inmueble.getIdInmueble());
		datosConsulta.put("id_propietario", cliente.getIdPersona());
		datosConsulta.put("estado", EstadoInmuebleEnum.VENDIDO.getId());

		return datosConsulta;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see inmobiliaria.frsf.bo.VentaBO#guardar(inmobiliaria.frsf.model. Venta)
	 */
	public void guardar(Venta venta) throws Exception {
		// TODO: Ejecutar con transacciones
		Map<String, Object> datosConsulta = getMapByVenta(venta);
		ventaDAO.guardar(datosConsulta);
		Map<String, Object> datosInmueble = getMapByInmueble(
				venta.getInmueble(), venta.getCliente());
		ventaDAO.actualizarEstadoInmueble(datosInmueble);
	}

	/**
	 * @return the propietarioDAO
	 */
	public VentaDAO getVentaDAO() {
		return ventaDAO;
	}

	/**
	 * @param propietarioDAO
	 *            the propietarioDAO to set
	 */
	public void setVentaDAO(VentaDAO ventaDAO) {
		this.ventaDAO = ventaDAO;
	}

	@Override
	public List<Persona> searchClientes() throws Exception {
		List<Persona> clientes = ventaDAO.searchClientes();

		return clientes;
	}
}
